Named এবং Unnamed Sockets

Computer Programming - ইউনিক্স সকেট (Unix Socket) Unix Domain Sockets (Unix Domain Sockets) |
261
261

Named এবং Unnamed Sockets-এর মধ্যে পার্থক্য এবং তাদের কাজের পদ্ধতি সম্পর্কে আলোচনা করা হলো:

Unnamed Sockets

Unnamed Sockets হলো এমন একটি socket যা কোনো নির্দিষ্ট নাম বা ঠিকানা সংযুক্ত ছাড়াই তৈরি হয়। এটি সাধারণত Inter-Process Communication (IPC) এর জন্য প্রক্রিয়াগুলোর মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়।

Unnamed Sockets এর বৈশিষ্ট্য

  1. নামহীন এবং অস্থায়ী:
    • Unnamed Sockets কোনো নাম বা পাথ (path) ব্যবহার করে না। এটি সাধারণত একবার ব্যবহারযোগ্য বা অস্থায়ী যোগাযোগের জন্য ব্যবহৃত হয়।
  2. Parent এবং Child Process এর মধ্যে যোগাযোগ:
    • Unnamed Sockets প্রায়শই একই প্রক্রিয়ার মধ্যে, যেমন parent এবং child process এর মধ্যে, দ্রুত ডেটা আদান-প্রদানের জন্য ব্যবহৃত হয়। এটি pipe বা socketpair ব্যবহার করে সহজেই তৈরি করা যায়।
  3. কেবলমাত্র একই সিস্টেমে কাজ করে:
    • Unnamed Sockets লোকালি (একই মেশিনে) প্রক্রিয়াগুলোর মধ্যে যোগাযোগ করতে পারে। এটি নেটওয়ার্ক বা দূরবর্তী যোগাযোগের জন্য ব্যবহার করা যায় না।
  4. সাধারণত সাময়িক ব্যবহার:
    • এটি সাধারণত অল্প সময়ের জন্য ব্যবহৃত হয়, যেখানে প্রক্রিয়াগুলোর মধ্যে সাময়িক ডেটা ট্রান্সফার দরকার হয়।

Unnamed Sockets এর উদাহরণ (C ভাষায়)

Unnamed Sockets তৈরি করতে সাধারণত socketpair() ফাংশন ব্যবহার করা হয়। নিচে একটি উদাহরণ দেওয়া হলো:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>

int main() {
    int sockets[2];
    char buffer[100];

    // 1. Socket pair তৈরি করা
    if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) == -1) {
        perror("socketpair");
        exit(EXIT_FAILURE);
    }

    if (fork() == 0) { // Child process
        close(sockets[0]);
        char *message = "Hello from child";
        write(sockets[1], message, strlen(message));
        close(sockets[1]);
    } else { // Parent process
        close(sockets[1]);
        read(sockets[0], buffer, sizeof(buffer));
        printf("Parent received: %s\n", buffer);
        close(sockets[0]);
    }

    return 0;
}

Named Sockets

Named Sockets হলো এমন একটি socket যা একটি নির্দিষ্ট নাম বা পাথ (path) ব্যবহার করে তৈরি করা হয়। এটি Unix Domain Sockets (UDS) এর একটি উদাহরণ, যেখানে একটি সুনির্দিষ্ট পাথ বা নাম ব্যবহার করে IPC (Inter-Process Communication) সম্পন্ন করা হয়। Named Sockets সাধারণত ফাইল সিস্টেমের একটি অংশ হিসেবে তৈরি হয়।

Named Sockets এর বৈশিষ্ট্য

  1. নির্দিষ্ট নাম বা ঠিকানা ব্যবহার করে:
    • Named Sockets একটি নির্দিষ্ট নাম বা ফাইল সিস্টেমের পাথ ব্যবহার করে তৈরি করা হয়। এটি ফাইলের মতো কাজ করে এবং প্রক্রিয়াগুলো সেই পাথ বা ফাইলের মাধ্যমে যোগাযোগ করে।
  2. বহুল ব্যবহৃত IPC পদ্ধতি:
    • Named Sockets Unix Domain Sockets (UDS) হিসেবে পরিচিত এবং এটি একাধিক প্রক্রিয়ার মধ্যে যোগাযোগ স্থাপন করতে ব্যবহার করা হয়।
  3. স্থায়ী বা দীর্ঘমেয়াদী ব্যবহার:
    • Named Sockets সাধারণত স্থায়ী বা দীর্ঘমেয়াদী যোগাযোগের জন্য ব্যবহৃত হয়, যেখানে একাধিক প্রক্রিয়া একই পাথ ব্যবহার করে একে অপরের সাথে ডেটা আদান-প্রদান করে।
  4. ফাইল সিস্টেমের অংশ:
    • Named Sockets একটি নির্দিষ্ট পাথ বা ফাইল সিস্টেমের অংশ হিসেবে তৈরি হয়, যা প্রক্রিয়াগুলো সহজেই অ্যাক্সেস করতে পারে। এটি সাধারণত /tmp ডিরেক্টরিতে বা সিস্টেমের অন্য কোনো অংশে তৈরি করা হয়।

Named Sockets এর উদাহরণ (C ভাষায়)

নিচে একটি Named Socket-এর উদাহরণ দেওয়া হলো, যেখানে Unix Domain Socket ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট তৈরি করা হয়েছে:

Server Program (C ভাষায়):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/named_socket"

int main() {
    int server_fd, client_fd;
    struct sockaddr_un server_addr;
    char buffer[100];

    // 1. Socket তৈরি করা
    if ((server_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 2. ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. Binding করা
    unlink(SOCKET_PATH);
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 4. Listening করা
    if (listen(server_fd, 5) < 0) {
        perror("Listen failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    printf("Server is listening...\n");

    // 5. Accepting সংযোগ
    if ((client_fd = accept(server_fd, NULL, NULL)) < 0) {
        perror("Accept failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 6. ডেটা গ্রহণ করা
    read(client_fd, buffer, sizeof(buffer));
    printf("Client: %s\n", buffer);

    // 7. Socket বন্ধ করা
    close(client_fd);
    close(server_fd);
    unlink(SOCKET_PATH);

    return 0;
}

Client Program (C ভাষায়):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/named_socket"

int main() {
    int client_fd;
    struct sockaddr_un server_addr;

    // 1. Socket তৈরি করা
    if ((client_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 2. সার্ভার ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. সার্ভারের সাথে সংযোগ স্থাপন করা
    if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Connection failed");
        close(client_fd);
        exit(EXIT_FAILURE);
    }

    // 4. ডেটা পাঠানো
    char *message = "Hello from client";
    write(client_fd, message, strlen(message));

    // 5. Socket বন্ধ করা
    close(client_fd);

    return 0;
}

Unnamed vs. Named Sockets: তুলনা

বৈশিষ্ট্যUnnamed SocketsNamed Sockets
ঠিকানা ব্যবহারকোনো নাম বা ঠিকানা ব্যবহার করে নাএকটি নির্দিষ্ট নাম বা পাথ ব্যবহার করে
ব্যবহারParent এবং Child process এর মধ্যে সাময়িক IPCদীর্ঘমেয়াদী বা স্থায়ী IPC এর জন্য
ফাইল সিস্টেমফাইল সিস্টেমের ওপর নির্ভর করে নাফাইল সিস্টেমের অংশ হিসেবে কাজ করে
লোকাল বা রিমোটশুধুমাত্র একই সিস্টেমে কাজ করেশুধুমাত্র একই সিস্টেমে কাজ করে
ব্যবহারিক উদাহরণsocketpair() APIUnix Domain Sockets (AF_UNIX, SOCK_STREAM)
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion